#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>

#define high 58
#define width 67
//全局变量
int cells[high][width];


void gotoxy(int x,int y)//光标移动到(x,y)位置
{
    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()//数据初始化
{
   int i,j;
   for(i=0;i<high;i++)
    for(j=0;j<width;j++)
    cells[i][j]=rand()%2;

}

void show()  //显示画面
{
    gotoxy(0,0);//光标移动到原点位置，以下重画清屏
    int i,j;

    for(i=0;i<high;i++)
    {
        for(j=0;j<width;j++)
        {
            if(cells[i][j]==1)
                printf("*");
            else
                printf(" ");

        }
        printf("\n");
    }
    HideCursor();
}
void updateWithoutInput()//与输入无关的更新
{
    int i,j;
    int tempcells[high][width];
    for(i=0;i<high;i++)
         for(j=0;j<width;j++)
         tempcells[i][j]=cells[i][j];
    int neibournumber=0;

    for(i=1;i<high-1;i++)
    {
        for(j=1;j<width-1;j++)
        {
            neibournumber=cells[i-1][j-1]+cells[i-1][j]+cells[i-1][j+1]
                        +cells[i][j-1]+cells[i][j]+cells[i][j+1]
                        +cells[i-1][j+1]+cells[i+1][j]+cells[i+1][j+1];
            if(neibournumber==3)
            tempcells[i][j]=1;
            else if(neibournumber==2||neibournumber==4)
                tempcells[i][j]=cells[i][j];
            else
                tempcells[i][j]=0;

        }
    }
    for(i=0;i<high;i++)
         for(j=0;j<width;j++)
         cells[i][j]=tempcells[i][j];
    Sleep(150);
}
void updateWithInput()//与输入有关的更新
{

}


int main()
{
    startup();//数据初始化
    while(1) //游戏循环执行
    {
        show();  //显示画面
        updateWithoutInput();//与输入无关
        updateWithInput();//与输入有关
    }


    return 0;
}